package com.zhangxu.microservice.system.biz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhangxu.microservice.system.biz.dto.CreateApplicationDTO;
import com.zhangxu.microservice.system.biz.dto.ApplicationDTO;
import com.zhangxu.microservice.system.biz.dto.UpdateApplicationDTO;
import com.zhangxu.microservice.system.dao.condition.ApplicationCondition;

import java.util.Collection;
import java.util.List;

/**
 * 系统管理服务接口
 */
public interface ApplicationService {

    /**
     * 创建系统
     *
     * @param createApplicationDTO 创建系统参数
     * @return 系统ID
     */
    Long createApplication(CreateApplicationDTO createApplicationDTO);

    /**
     * 更新系统
     *
     * @param updateApplicationDTO 更新系统参数
     */
    void updateApplication(UpdateApplicationDTO updateApplicationDTO);

    /**
     * 删除系统
     *
     * @param applicationId 系统ID
     */
    void deleteApplication(Long applicationId);

    /**
     * 启用系统
     *
     * @param applicationId 系统ID
     */
    void enableApplication(Long applicationId);

    /**
     * 禁用系统
     *
     * @param applicationId 系统ID
     */
    void disableApplication(Long applicationId);

    /**
     * 根据ID获取系统详情
     *
     * @param applicationId 系统ID
     * @return 系统详情
     */
    ApplicationDTO getApplicationById(Long applicationId);

    /**
     * 根据编码获取系统详情
     *
     * @param appCode 系统编码
     * @return 系统详情
     */
    ApplicationDTO getApplicationByCode(String appCode);

    /**
     * 根据ID获取系统详情
     *
     * @param applicationIds 系统ID
     * @return 系统详情
     */
    List<ApplicationDTO> listApplicationByIds(Collection<Long> applicationIds);

    /**
     * 分页查询系统列表
     *
     * @param condition 查询条件
     * @return 系统分页信息
     */
    IPage<ApplicationDTO> page(ApplicationCondition condition);
}